#include<bits/stdc++.h>
#define random(a,b) (a+rand()%(b-a+1))
using namespace std;

const double eps=1e-8;

int n,flag=0;
double Matrix[120][120],f[120];

int main()
{
	srand(time(NULL));
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n+1;j++) scanf("%lf",&Matrix[i][j]);
	}
	for(int i=1;i<=n-1;i++)//随机数算法
	{
		for(int j=i+1;j<=n;j++)
		{
			int t=random(i,j);
			if(t&1)
			{
				for(int k=1;k<=n+1;k++) swap(Matrix[i][k],Matrix[j][k]);
			}
		}
	}
	for(int i=1;i<=n;i++)//高斯-约旦消元法
	{
		int t=i;
		for(int j=i+1;j<=n;j++)
		{
			if(fabs(Matrix[j][i])>fabs(Matrix[t][i])) t=j;
		}
		if(t!=i)
		{
			for(int j=1;j<=n+1;j++) swap(Matrix[i][j],Matrix[t][j]);
		}
		if(fabs(Matrix[i][i])<eps) continue;
		for(int j=1;j<=n;j++)
		{
			if(i==j) continue;
			double tmp=Matrix[j][i]/Matrix[i][i];
			for(int k=i;k<=n+1;k++) Matrix[j][k]-=Matrix[i][k]*tmp; 
		}
	}
	for(int i=1;i<=n;i++)//对其无解、无穷解的特判
	{
		if(fabs(Matrix[i][i])<eps)
		{
			if(fabs(Matrix[i][n+1]>eps))
			{
				flag=1;
				break;
			}
			else flag=2; 
		}
		else f[i]=Matrix[i][n+1]/Matrix[i][i];
	}
	if(flag==1)
	{
		cout<<"no solutions";
		return 0;
	}
	if(flag==2)
	{
		cout<<"infinite solutions";
		return 0;
	}
	for(int i=1;i<=n;i++) printf("x%d=%0.2lf\n",i,f[i]);
	return 0;
}
